package br.com.foxinline.manager.relatorio;

import br.com.foxinline.modelo.*;
import br.com.foxinline.servico.*;
import java.util.*;
import javax.annotation.PostConstruct;
import javax.ejb.EJB;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.ViewScoped;
import org.primefaces.event.SelectEvent;
import org.primefaces.event.UnselectEvent;

/**
 *
 * @author laverson
 */
@ManagedBean
@ViewScoped
public class ManagerRelatorioBairro {

    @EJB
    ImovelServico imovelServico;
    @EJB
    BairroServico bairroServico;
    @EJB
    PrefeituraServico prefeituraServico;
    @EJB
    CidadeServico cidadeServico;
    private List<Bairro> bairrosSelecionados;

    @PostConstruct
    public void init() {
        this.bairrosSelecionados = new ArrayList<Bairro>();
    }

    public List<Bairro> getBairros() {
        List<Bairro> selectItems = new ArrayList<Bairro>();

        for (Bairro b : bairroServico.findAll()) {
            selectItems.add(b);
        }
        return selectItems;
    }

    public List<Bairro> autocompleteMultipleBairro(String query) {
        return bairroServico.autocomplete(query, this.bairrosSelecionados);
    }

    public void adicionarBairroSelecionado(SelectEvent e) {
        this.bairrosSelecionados.add((Bairro) e.getObject());
    }

    public void removerBairroSelecionado(UnselectEvent e) {
        this.bairrosSelecionados.remove((Bairro) e.getObject());
    }

    public void imprimirRelatorioPorBairro() {
        HashMap parametros = new HashMap();

        parametros.putAll(prefeituraServico.parametroPrefeitura());

        Map<String, Object> map;
        List<Map<String, Object>> list = new ArrayList<Map<String, Object>>();

        Bairro bairro = new Bairro();
        bairro.setCidade(cidadeServico.find(5658L));

        if (this.bairrosSelecionados != null && this.bairrosSelecionados.isEmpty()) {
            this.bairrosSelecionados = bairroServico.find(bairro, null, null);
        }

        for (Bairro b : this.bairrosSelecionados) {

            Imovel i = new Imovel();
            i.setEnderecoImovel(new Endereco());
            i.getEnderecoImovel().setBairro(b.getNome());

            Integer quantidade = imovelServico.find(i, null, null).size();

            if (quantidade > 0) {

                map = new HashMap<String, Object>();
                map.put("bairro", b.getNome());
                map.put("quantidade", quantidade);

                list.add(map);
            }
        }

        parametros.put("titulo", "Quantidade de Imóveis");
        parametros.put("subTitulo", "Por Bairro");

        imovelServico.relatorioPorBairro(parametros, list);
    }
}
